# -*- coding: UTF-8 -*-
import datetime
import os
import time

currentDate = time.strftime("%Y%m%d", time.localtime())
# =====================================================================================================panddas and style
import pandas as pd
from colorama import init, Fore, Style

pd.set_option('display.expand_frame_repr', False)
init(autoreset=True)

# from makedir import FileOp from tqdm import tqdm
# ===============================================================================================================loguru
from loguru import logger

LOG_DIR = os.path.expanduser("logs/")
LOG_FILE = os.path.join(LOG_DIR, currentDate + "read_big_csv.log")
logger.add(LOG_FILE, rotation="2000KB", encoding='gb2312')  # 压缩成zip格式


# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@CLASS Config
class Config:
    import configparser
    def __init__(self, filename, encoding="gbk"):
        logger.info("Config:def __init__(self):初始化" + filename + encoding)
        self.cf = self.configparser.ConfigParser()
        self.cf.read(filename, encoding=encoding)  # 读取配置文件，如果写文件的绝对路径，就可以不用os模块

    def get_config(self, rootstr, txt):
        return self.cf.get(rootstr, txt)
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@CLASS Config
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@FileOp@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@CLASS FileOp
class FileOp:
    @staticmethod
    def mkdir(path):
        # 引入模块
        import os
        # 去除首位空格
        path = path.strip()
        # 去除尾部 \ 符号
        path = path.rstrip("\\")
        # 判断路径是否存在# 存在     True# 不存在   False
        isExists = os.path.exists(path)
        # 判断结果
        if not isExists:
            # 如果不存在则创建目录
            # 创建目录操作函数
            os.makedirs(path)
            logger.success(path + ' 创建成功')
            return True
        else:
            # 如果目录存在则不创建，并提示目录已存在
            logger.warning(path + ' 目录已存在')
            return False

    @staticmethod
    def get_totalsize(path_add):
        size = 0
        # 遍历并装载第一层的文件和文件夹
        __list = os.listdir(path_add)
        for i in __list:
            # 拼接成完整的绝对路径
            pathfile = os.path.join(path_add, i)
            # 文件 OR NOT
            if os.path.isfile(pathfile):
                # print(i," is FILE")# print(pathfile)# 统计文件大小
                size += os.path.getsize(pathfile)
            # 文件夹 OR NOT
            elif os.path.isdir(pathfile):
                # print(i," is FOLDER") # print(pathfile)# 递归统计文件夹里面的文件名称
                size += FileOp.get_totalsize(pathfile)
        return size

    @staticmethod
    def deldir(location):
        import glob
        # Importing os and glob modules # Loop Through the folder projects all files and deleting them one by one
        for file in glob.glob(location + "/*"):
            os.remove(file)
            logger.success("Deleted " + str(file))
    # result = getTotalsize(path_add)
    # print("Total size:{}字节({}MB)".format(result, result // 1024 // 1024))  # 输出总大小
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@CLASS FileOp

@logger.catch
def show_title(title, show_func, **kwargs):
    logger.info('show_title')

    starttime = datetime.datetime.now()

    show_func(title, **kwargs)

    endtime = datetime.datetime.now()
    logger.success('程序运行时间:' + str(endtime - starttime))


def exe(ff):
    set_running(ff, func=funcxxxs)
    print("exe")


@logger.catch
def set_running(title, func, **kwargs):
    logger.info('set_running' + str(title))
    cf = Config("config.ini")
    # __currentDate = time.strftime("%Y%m%d", time.localtime())
    # __currentDate = __currentDate + "_final"
    targetDir = cf.get_config("IOFileConfig", "exportdir")
    logger.success(targetDir)
    dir_list = os.listdir(targetDir)
    dirfilecount = len(dir_list)
    # logger.success(str(type(dir_list))+str(dirfilecount))
    # pbar = tqdm(dir_list,colour='yellow')
    # for char in pbar:
    #     pbar.set_description("Progress %s" %char)
    scale = dirfilecount
    logger.success(targetDir)
    # print(scale)
    LL = 40
    __color_para = Fore.RED
    i = 0
    for __list in dir_list:
        i += 1
        # msg =getattr(funcxxx, '__name__')
        # logger.info(__list)
        msg1, msg2 = func(__list, **kwargs)
        a = (i / scale) * 100
        # '.' * LL
        c = '▋' * (int((i * LL) / scale))
        b = '.' * ((LL - 1) - int((i * LL) / scale))
        dur = time.perf_counter()  # //每次获取当前时间
        # msg1 = str(title)
        # msg2 = msg1 + str(title)
        # print(__list)
        print(Style.BRIGHT + Fore.RED + "\r[{}]{:^3.0f}% {}{} {:.2f}s".format(i, a, c, b, dur), msg1, msg2,
              dirfilecount, end=' ')
        # time.sleep(0.01)
        if i == 100:
            break
    print("循环", i)
    # print(char)


def funcxxxs(chanshu):
    print(chanshu)
    return "A", "B"


if __name__ == '__main__':
    os.system("cls")
    show_title("set_running", show_func=exe)
